package com.ocp.macro.controller;

import com.ocp.macro.entity.DealList;
import com.ocp.macro.entity.DealerAccount;
import com.ocp.macro.service.DealerListService;
import com.ocp.macro.service.OperateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;


/**
 * 运营账号控制层
 */
@Slf4j
@CrossOrigin
@RestController
@Secured({"ROLE_supperAccount"}) // 需要运营人员权限
public class OperateAccountController {
    @Resource
    private OperateService operateService;
    @Resource
    private DealerListService dealerListService;

    /**
     * 请求当前登录人员下所关联的经销商总帐号信息
     * 前端传的字段信息有：经销商名称（dealName），用户名称（userName），账号状态信息(status)
     * @param dealerAccount 用于封装前端穿的信息
     */
    @PostMapping("/macro/optaccount/dearlacctinfos")
    public String operateDealerInfoList(@RequestBody DealerAccount dealerAccount ){
        log.debug("{}",dealerAccount);
        return operateService.getDealerAccountInfoList(dealerAccount, null);
    }

    /**
     * 进行新增账号请求
     * @param dealerAccount 新增账号信息
     */
    @PostMapping("/macro/optaccount/dearlacctadd")
    public String operateDealerInfoAdd(@RequestBody DealerAccount dealerAccount){
        log.debug("{}",dealerAccount);
        return operateService.createDealerAccountInfo(dealerAccount, null);
    }

    /**
     * 请求删除当前所选的关联的经销商总帐号
     * 前端传递的一组经销商账号id数组,封装在 DealerAccount中的 list 集合中
     * @param dealerAccount 要进行删除的账号信息
     */
    @PostMapping("/macro/optaccount/dearlacctdelete")
    public String operateDealerInfoDelete(@RequestBody DealerAccount dealerAccount){
        log.debug("{}",dealerAccount);
        return operateService.deleteDealerAccountInfo(dealerAccount, null);
    }

    /**
     * 批量请求 修改所选的 经销商总帐号 的 账号状态
     * 前端传递的一组经销商账号id数组,封装在 DealerAccount中的 list 集合中
     * 和封装了一个status值： 0：禁用账号， 1：启用账号
     * @param dealerAccount 要进行修改的账号信息
     */
    @PostMapping("/macro/optaccount/dearlacctmodify")
    public String operateDealerStateModify(@RequestBody DealerAccount dealerAccount){
        log.debug("{}",dealerAccount);
        return operateService.modifyDealerAccountState(dealerAccount,null);
    }

    /**
     * 请求所选 经销商总帐号(dealerId) 所关联的经销商信息列表
     * @param dealList 经销商总帐号在表中的Id
     */
    @PostMapping("/macro/optaccount/dealerlistinfos")
    public String operateDealerRelationInfo(@RequestBody DealList dealList){
        log.debug("{}",dealList);
        return dealerListService.getDealerListInfo(dealList);
    }

    /**
     * 请求设置所选的 经销商总帐号 与所选的 经销商信息编号 进行 关联 或 解除关联
     * 传入一个json数据，{"dealRelNos":"123456","dealerId":12,"state":2}
     * state: Integer (关联状态：0解除关联，2：进行关联)
     * @param jsonStr json格式数据
     */
    @PostMapping("/macro/optaccount/dealerrelset")
    public String operateDealerRelationSet(@RequestBody String jsonStr){
        log.debug("{}",jsonStr);
        return dealerListService.setDealerAccountRelationDealerInfo(jsonStr);
    }

    /**
     * 请求重置所选账号的密码
     * @param dealerId 账号所在表中的id
     */
    @PostMapping("/macro/optaccount/dealerreset")
    public String operateDealerPwdReset(Integer dealerId){
        log.debug("{}",dealerId);
        return operateService.resetDealerAccountPwd(dealerId);
    }

    /**
     * 请求修改所选账号信息
     * @param dealerAccount 修改后的账号信息
     */
    @PostMapping("/macro/optaccount/dealerinfomodify")
    public String operateDealerInfoModify(@RequestBody DealerAccount dealerAccount){
        log.debug("{}",dealerAccount);
        return operateService.modifyDealerAccountInfo(dealerAccount, null);
    }
}
